The present invention relates generally to the field of personal computers, and in particular to a method for monitoring a basic input/output system (BIOS). The present invention is particularly well-suited for monitoring a BIOS which is accessed using selector addressing, and may be advantageously used to analyze the performance of software by monitoring their use of various BIOS routines.
In a personal computer, a BIOS handles communications between software running on the computer and devices such as CPUs, disk drives and printers. For computers running the Windows.RTM.v3.1 or Windows.RTM.95 operating system, certain BIOS routines provide mechanisms to enable software to access the BIOS in 32-bit mode. Examples of such BIOS routines are APM (Advanced Power Management) and SMB (System Management Bus).
To access a BIOS routine in 32-bit mode, the calling software must create a special 32-bit code selector for the BIOS. This requires that the software know where the BIOS 32-bit code resides in real-mode memory. This location may be determined by execution of a real-mode interrupt BIOS call, which generally also returns such information as:
real-mode segment base address of the BIOS 32-bit entry point; PA1 offset of the 32-bit entry point; PA1 length of code segment; PA1 real-mode segment base address of the BIOS 16-bit code segment; PA1 real-mode segment base address of the BIOS data segment; and PA1 length of data segment.
The calling software may then create the required 32-bit code selector using the real-mode segment base address of the BIOS 32-bit entry point and the length of the code segment. Some BIOS routines may additionally require that the calling software create a 16-bit code selector (using the real-mode segment base address of the BIOS 16-bit code segment) and/or a 32-bit data selector (using the real-mode segment base address of the BIOS data segment and the length of the data segment).
Once all of the required selectors have been built, the calling software creates a far 32-bit pointer. The far 32-bit pointer consists of a 16-bit code selector (i.e., the one allocated for 32-bit code) and the offset of the BIOS 32-bit entry point This entry point is then stored for later use in calling the BIOS routine as needed. Further details on how BIOS routines of this type are accessed can be found in Advanced Power Management (APH) Specification v1.2, which describes the APM software interface.
The above-described 32-bit BIOS access is beneficial in that it allows the operating system to avoid the overhead required for frequent mode switching between 32-bit and 16-bit code. On the other hand, it is extremely difficult to monitor a BIOS accessed in this manner because the BIOS is invoked through a direct call (i.e., using the far 32-bit pointer) rather than through a chained interrupt that can be "hooked" with standard methods. The ability to monitor such a BIOS, however, is highly desirable for a variety of reasons. For example, without the ability to monitor application accesses to the APM BIOS it is virtually impossible to accurately determine how effectively the software is using available power-saving tools. A significant need thus exists for a way to monitor a BIOS interface that uses 32-bit selector addressing.